import { lazyReportBatch } from '../report.js';

export default function observerEntries() {
    if(document.readyState === 'complete') {
        observerEvent();
    } else {
        const onLoad = () => {
            observerEvent();
            window.removeEventListener('load',onLoad,true);
        }
        window.addEventListener('load',onLoad,true);// 捕获阶段
    }
}
export function observerEvent(){
    const entryHandler = (list) => {
        const data = list.getEntries();
        // console.log('data',data);
        for(let entry of data) {
            if(observer) {
                observer.disconnect();
            }
            // console.log('entry',entry);
            const reportData = {
                name:entry.name,// 资源名字
                type:"performance",// 类型
                subType:entry.entryType,// 类型
                sourceType:entry.initiatorType,// 资源类型
                duration:entry.duration,//资源加载时间
                dns:entry.domainLookupEnd - entry.domainLookupStart,// dns解析时间
                tcp:entry.connectEnd - entry.connectStart,// tcp连接时间
                redirect:entry.redirectEnd - entry.redirectStart,// 重定向时间
                ttfb:entry.responseStart,//页面发出请求，到接收第一个字节所花费的毫秒数(首字节时间)
                protocol:entry.nextHopProtocol,// 请求协议
                responseBodySize:entry.encodedBodySize,// 响应内容大小
                responseHeaderSize:entry.transferSize - entry.encodedBodySize,// 响应头部大小
                transferSize:entry.transferSize,// 表示资源在传输过程中实际传输的字节数，包括 响应头（headers） 和 响应体（body） 的总大小。
                resourceSize: entry.decodedBodySize,// 资源解压后的大小
                startTime:performance.now(),// 它返回从页面开始加载（即 navigationStart 时间点）到当前调用 performance.now() 方法时所经过的毫秒数。这个时间是高精度的，通常用于性能测量。
            }
            lazyReportBatch(reportData);

        }
    }
    let observer = new PerformanceObserver(entryHandler);
    observer.observe({type:["resource"],buffered:true}); // type可以是字符串也可以是数组
}